package lab3;

/**
 * 版本1.0 算式类
 * 支持基本的四则运算（+、-、*、/）
 */
public class ArithmeticExpression {
    private double operand1;   // 第一个操作数
    private double operand2;   // 第二个操作数
    private char operator;     // 运算符
    private double result;     // 计算结果

    /**
     * 构造函数
     * @param operand1 第一个操作数
     * @param operand2 第二个操作数
     * @param operator 运算符（+、-、*、/）
     * @throws IllegalArgumentException 当运算符无效时抛出异常
     */
    public ArithmeticExpression(double operand1, double operand2, char operator) {
        this.operand1 = operand1;
        this.operand2 = operand2;
        
        // 验证运算符有效性
        if (operator != '+' && operator != '-' && operator != '*' && operator != '/') {
            throw new IllegalArgumentException("无效的运算符: " + operator);
        }
        this.operator = operator;
        
        // 计算结果
        calculate();
    }

    /**
     * 计算表达式结果
     * @throws ArithmeticException 当除数为零时抛出异常
     */
    private void calculate() {
        switch (operator) {
            case '+':
                result = operand1 + operand2;
                break;
            case '-':
                result = operand1 - operand2;
                break;
            case '*':
                result = operand1 * operand2;
                break;
            case '/':
                if (operand2 == 0) {
                    throw new ArithmeticException("除数不能为零");
                }
                result = operand1 / operand2;
                break;
        }
    }

    /**
     * 获取计算结果
     * @return 计算结果
     */
    public double getResult() {
        return result;
    }

    /**
     * 获取第一个操作数
     * @return 第一个操作数
     */
    public double getOperand1() {
        return operand1;
    }

    /**
     * 获取第二个操作数
     * @return 第二个操作数
     */
    public double getOperand2() {
        return operand2;
    }

    /**
     * 获取运算符
     * @return 运算符
     */
    public char getOperator() {
        return operator;
    }

    /**
     * 将表达式格式化为字符串
     * @return 格式化的表达式字符串
     */
    @Override
    public String toString() {
        return String.format("%.2f %c %.2f = %.2f", operand1, operator, operand2, result);
    }
}